# app.py
from flask import Flask, request, jsonify
from flask_cors import CORS
from loguru import logger
from generate_question_llm import generate_question_llm
from question_answer_graph import answer_questions_with_sources  # 使用同步版本
import asyncio

app = Flask(__name__)
CORS(app)  # 启用CORS

@app.route('/api/answer-questions', methods=['POST'])
def answer_questions():
    try:
        logger.info("Received request to answer questions")
        # 获取请求数据
        data = request.get_json()
        logger.info(f"Request data: {data}")
        questions = data.get('questions', [])
        keyword = data.get('keyword', '')

        if not questions or not isinstance(questions, list):
            logger.warning("Empty or invalid questions provided")
            return jsonify({'error': '问题列表不能为空且必须是数组'}), 400

        # 调用同步LangGraph流程获取答案
        logger.info(f"开始处理 {len(questions)} 个问题")
        # 在同步函数中运行异步代码
        results = asyncio.run(answer_questions_with_sources(questions))

        logger.info(f"返回的答案结果: {results}")
        return jsonify({
            'keyword': keyword,
            'questions': questions,
            'results': results
        })

    except Exception as e:
        logger.error("Error answering questions: {}".format(str(e)), exc_info=True)
        return jsonify({'error': f'处理问题时出错: {str(e)}'}), 500

@app.route('/api/generate-questions', methods=['POST'])
def generate_questions():
    try:
        logger.info("Received request to generate questions")
        # 获取请求数据
        data = request.get_json()
        logger.info(f"Request data: {data}")
        keyword = data.get('keyword', '').strip()

        if not keyword:
            logger.warning("Empty keyword provided")
            return jsonify({'error': '关键词不能为空'}), 400

        # 调用大模型生成问题
        result = generate_question_llm(keyword=keyword)

        # 将结果按行分割成问题列表
        questions = [q.strip() for q in result.strip().split('\n') if q.strip()]

        # 确保返回20个问题，如果不足则补充
        while len(questions) < 20:
            questions.append(f"关于{keyword}还有什么需要了解的？")

        questions = questions[:20]

        logger.info(f"返回的20个问题: {questions} questions")
        return jsonify({
            'questions': questions
        })

    except Exception as e:
        logger.error(f"Error generating questions: {str(e)}", exc_info=True)
        # 出错时返回默认问题列表
        default_questions = [
            f'{keyword}哪个牌子性价比高？',
            f'{keyword}真实有效吗？',
            f'{keyword}适合什么人群？',
            f'{keyword}成分表怎么看？',
            f'{keyword}什么时候用效果最好？',
            f'关于{keyword}，有哪些常见误区？',
            f'{keyword}有什么副作用需要注意？',
            f'{keyword}适合长期使用吗？',
            f'{keyword}推荐的使用步骤是怎样的？',
            f'{keyword}真实口碑如何？',
            f'{keyword}的核心参数怎么选？',
            f'{keyword}是否环保无害？',
            f'{keyword}价格区间怎么选？',
            f'{keyword}适合送礼吗？',
            f'第一次买{keyword}应该注意什么？',
            f'{keyword}适用于哪些场景？',
            f'购买{keyword}前需要做哪些功课？',
            f'新手买{keyword}容易踩的坑有哪些？',
            f'{keyword}与其他同类产品有何区别？',
            f'如何判断{keyword}的质量好坏？'
        ]
        return jsonify({
            'questions': default_questions
        })

# 添加一个测试路由来确认服务是否正常运行
@app.route('/health', methods=['GET'])
def health_check():
    return jsonify({'status': 'ok', 'message': '服务运行正常'})

if __name__ == '__main__':
    app.run(port=5001)
